一个文件都有一个所有者, 表示该文件是谁创建的. 同时, 该文件还有一个组编号, 表示该文件所属的组, 一般为文件所有者所属的组. 如果是一个可执行文件, 那么在执行时, 一般该文件只拥有调用该文件的用户具有的权限. 而setuid, setgid 可以来改变这种设置.
setuid、setgid、sticky bit 说明
setuid:用于二进制可执行文件,设置使文件在执行阶段具有文件所有者的权限。典型的文件是 /usr/bin/passwd
,它更改用户的密码时是会更改 /etc/passwd
和 /etc/shadow
等文件的,这些文件默认普通用户没有写权限。如果一般用户执行该文件,则在执行过程中,该文件可以获得 root 权限,从而可以更改用户的密码。
setgid:用于目录,用户在该目录下创建的文件都拥有与该目录相同的属组。当作用在文件上时,作用和 suid
类似,让执行该文件的用户临时拥有属组的权限,目录被设置该位后,任何用户在此目录下创建的文件都具有和该目录所属的组相同的组。
sticky bit:该位可以理解为防删除位。一个文件是否可以被某用户删除,主要取决于该文件所属的组是否对该用户具有写权限。如果没有写权限,则这个目录下的所有文件都不能被删除,同时也不能添加新的文件。如果希望用户能够添加文件但同时不能删除文件,则可以对文件使用 sticky bit
位。设置该位后,就算用户对目录具有写权限,也不能删除该文件。
权限修改操作
操作这些标志与操作文件权限的命令是一样的,都是 chmod
。有两种方法来操作:
1. 如下
|
|
2. 用八进制方式。对一般文件通过三组八进制数字来设置标志,如 666 ,777 ,644 等。如果设置这些特殊标志,则在这组数字之外外加一组八进制数字。如 4666 , 2777 等。这一组八进制数字三围的意义如下:
- a - setuid 位,如果该位为 1,则表示设置 setuid
- b - setgid 位,如果该位为 1,则表示设置 setgid
- c - sticky 位,如果该位为 1,则表示设置 sticky
也就是说,如果有特殊权限是,第一位数字可以是 0,1(–t),2(-s-),3(-st),4(s–),5(s-t),6(ss-),7(sst)
设置完这些标志后,可以用 ls l
来查看。如果有这些标志,则会在原来的执行标志位置上显示。如:
|
|
那么原来的执行标志 x
,系统是这样规定的。如果本来该为上有 x
,则这些特殊表示显示为小写字母(s ,s ,t)。否则,显示为大写字母(S , S ,T)